package com.seafood.service;

import com.seafood.dto.ColdChainRecordDTO;
import com.seafood.entity.ColdChainRecord;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 冷链运输记录服务接口
 */
public interface ColdChainRecordService {
    
    /**
     * 创建冷链运输记录
     */
    ColdChainRecordDTO createColdChainRecord(ColdChainRecordDTO recordDTO);
    
    /**
     * 更新冷链运输记录
     */
    ColdChainRecordDTO updateColdChainRecord(Long id, ColdChainRecordDTO recordDTO);
    
    /**
     * 根据ID获取冷链记录
     */
    ColdChainRecordDTO getColdChainRecordById(Long id);
    
    /**
     * 根据运输单号获取冷链记录
     */
    ColdChainRecordDTO getColdChainRecordByTransportNumber(String transportNumber);
    
    /**
     * 根据订单ID获取冷链记录列表
     */
    List<ColdChainRecordDTO> getColdChainRecordsByOrderId(Long orderId);
    
    /**
     * 根据产品ID获取冷链记录列表
     */
    List<ColdChainRecordDTO> getColdChainRecordsByProductId(Long productId);
    
    /**
     * 分页获取冷链记录
     */
    Page<ColdChainRecordDTO> getColdChainRecords(Pageable pageable);
    
    /**
     * 根据状态分页获取冷链记录
     */
    Page<ColdChainRecordDTO> getColdChainRecordsByStatus(String status, Pageable pageable);
    
    /**
     * 获取正在运输中的记录
     */
    List<ColdChainRecordDTO> getActiveTransports();
    
    /**
     * 根据运输公司搜索记录
     */
    Page<ColdChainRecordDTO> searchByTransportCompany(String transportCompany, Pageable pageable);
    
    /**
     * 根据时间范围查找记录
     */
    List<ColdChainRecordDTO> getColdChainRecordsByTimeRange(LocalDateTime startTime, LocalDateTime endTime);
    
    /**
     * 获取有活跃报警的运输记录
     */
    List<ColdChainRecordDTO> getRecordsWithActiveAlerts();
    
    /**
     * 根据质量评分范围查找记录
     */
    Page<ColdChainRecordDTO> getColdChainRecordsByQualityScoreRange(Double minScore, Double maxScore, Pageable pageable);
    
    /**
     * 开始运输
     */
    ColdChainRecordDTO startTransport(Long id);
    
    /**
     * 完成运输
     */
    ColdChainRecordDTO completeTransport(Long id);
    
    /**
     * 取消运输
     */
    ColdChainRecordDTO cancelTransport(Long id, String reason);
    
    /**
     * 更新当前位置和状态
     */
    ColdChainRecordDTO updateCurrentStatus(Long id, String location, Double currentTemp, Double currentHumidity, String gpsCoordinates);
    
    /**
     * 计算质量评分
     */
    Double calculateQualityScore(Long id);
    
    /**
     * 获取运输统计信息
     */
    Map<String, Object> getTransportStatistics();
    
    /**
     * 删除冷链记录
     */
    void deleteColdChainRecord(Long id);
    
    /**
     * 生成运输报告
     */
    Map<String, Object> generateTransportReport(Long id);
}